package com.general.framework.core.lang;

import com.general.framework.core.exception.Ex;

import java.math.BigDecimal;
import java.util.Objects;

/**
 * @author leejean
 * @ClassName: Default
 * @Description: 默认值设置类，用于消除空指针异常。
 * @date 2020年07月01 18:36:50
 */
public abstract class Defaults {

    /**
     * 字符串
     *
     * @param str
     * @return
     */
    public static String string(final String str) {
        return Defaults.defaultValue(str, Strings.EMPTY);
    }

    /**
     * 创建基于bigDecimal的默认值
     *
     * @param bigDecimal
     * @return
     */
    public static BigDecimal bigDecimal(final BigDecimal bigDecimal) {
        return defaultValue(bigDecimal, BigDecimal.ZERO);
    }

    /**
     * 基于integer的默认值
     *
     * @param num
     * @return
     */
    public static Integer integer(final String num) {
        if (!Strings.isNumber(num)) {
            throw Ex.violation("'%s' not a number", num);
        }
        return defaultValue(Integer.valueOf(num), Numbers.INTEGER_ZERO);
    }

    /**
     * 基于integer的默认值
     *
     * @param integer
     * @return
     */
    public static Integer integer(final Integer integer) {
        return defaultValue(integer, Numbers.INTEGER_ZERO);
    }

    /**
     * 基于Long的默认值
     *
     * @param num
     * @return
     */
    public static Long longNum(final Long num) {
        return defaultValue(num, Numbers.LONG_ZERO);
    }

    /**
     * null default value
     *
     * @param sourceValue
     * @param defaultValue
     * @param <T>
     * @return
     */
    public static <T> T defaultValue(final T sourceValue, final T defaultValue) {
        if (Objects.isNull(sourceValue)) {
            return defaultValue;
        }
        return sourceValue;
    }

}
